Because network devices and hosts connected to a network can dynamically change and evolve over time, it is often difficult to determine all network devices and hosts connected to a network. For example, it is difficult for a network administrator managing a network to obtain a complete list of all network devices connected to the network because a network device may dynamically connect and disconnect with the network without notification. Although a network can be crawled to discover devices connected to the network, traditional crawling methods are slow, unreliable, and incomplete (e.g., a connected network device may refuse to respond to a query). Therefore, there exists a need for an efficient and reliable way to discover network devices connected to a network.